首先定义一些术语，MapReduce作业（job)是客户端需要执行的一个工作单元，它包括输入数据，MapReduce 程序和配置信息。Hadoop

将作业分成若干个任务（task)执行，其中包括两类任务：map任务和reduce任务。这些任务运行在集群的节点上，

并通过YARN进行调度。如果一个任务失败，它将在另一个不同的节点上自动重新调度运行。

Hadoop将MapReduce的输入数据划分成等长的小数据块，称为输入分片

（input split)或简称"分片".hadoop 为每个分片构建一个map任务，并由该任务来运行

用户自定义map函数从而处理分片中的每条记录。

distcp是作为一个MapReduce作业执行的，复制工作由集群中并行运行的map来完成。这里并没有reducer。

每个文件都由一个单一的map进行复制，并且distcp通过将文件分成大致相等的文件来为每个map数量大致相同的数据。

map的数量是这样确定的。通过让每一个map复制数量合理的数据以最小化任务建立所涉及的开销，

是一个很好的想法，所以每个map的副本至少为256 MB。(除非输入的总大小较少，否则一个map就足以操控全局。)例如，

1 GB的文件会被分成4个map任务。如果数据很大，为限制带宽和集群的使用而限制映射的数量就变得很有必要。

map默认的最大数量是每个集群节点(tasktracker)有20个。例如，复制1000 GB的文件到一个100个节点的集群，

会分配2000个map(每个节点20个map)，所以平均每个会复制512 MB。通过对distcp指定-m参数，会减少映射的分配数量。

例如，-m 1000会分配1000个map，平均每个复制1 GB。
